from abc import ABC, abstractmethod


class AAA(ABC):
    name = "tim"

    @abstractmethod
    def f1(self):
        pass

    @abstractmethod
    def f2(self):
        pass

    def hi(self):
        print("h1()...")

    def ok(self):
        pass

#Can't instantiate abstract class BBB without an implementation for abstract method 'f2'
class BBB(AAA):
    #实现父类的f1的抽象方法
    #既然继承了AAA类，并且当前AAA类是一个抽象类，那么就要实现里面所有的抽象方法
    def f1(self):
        print("BBB()-f1()...")

    def f2(self):
        pass

obj2 = BBB()
obj2.f1()
obj2.hi()
obj2.ok()
print("~~~")

#如果没有一个抽象方法,那么就能实例化  跟普通的类一样，就是普通的类
#如果里面有一个抽象方法,当前类才是抽象类
# obj1 = AAA()
# print(obj1)

#如果以一个类继承了抽象类,则他必须实现抽象类的所有抽象方法,否则它仍然是一个抽象类
